//
//  LCOAuthViewModel.swift
//  SinaWeiBo
//
//  Created by mac on 16/12/5.
//  Copyright © 2016年 heima. All rights reserved.
//

import UIKit

class LCOAuthViewModel: NSObject {
    
    //设置单例全局访问点
    static let sharedViewModel: LCOAuthViewModel = LCOAuthViewModel()
    //通过解档来获取对应的model /只读计算属性
    var userAccount:LCOAuthModel? {
        
        return LCOAuthModel.loadUserAccount()
    }
    
    //MARK:判断access_token是否过期
    /*
     1. 判断accesstoken是否为nil, 如果为nil, 直接返回nil
     2. 如果不为nil, 判断accesstoken的过期时间是否大于我们的当前时间,如果过期时间大于我们的当前时间表示没有过期, 返回accesstoken, 否则 表示过期了, 那么返回nil
     */
    var accessToken: String? {
        
        guard let token = userAccount?.access_token else {
            return nil
        }
        //  代码执行到此表示token不为nil
        //  比较那个那个时间大,如果是降序表示过期时间大于我们的当前时间
        if userAccount?.expores_date?.compare(Date()) == ComparisonResult.orderedDescending {
            return token
            
        } else {
            
            //  过期了
            return nil
        }
        
        
        
    }
    
    
    
    
    //MARK:通过code值来获取accessToKen
    func getaccessToKen(code: String,callBack:@escaping (Bool) ->()){
        
        LCNetMansagerTools.sharedTools.requestAccessToKen(code: code, callBack: {(responds, error) ->() in
            if error != nil{
                callBack(false)
                return
            }
            //到此处说明已经请求成功
            //1根据新浪文档知道，返回来的是一个字典，将数据转换成字典模式
            let dict = responds as! [String:Any]
            //2字典转模型
            let userAccess = LCOAuthModel(dic: dict)
            
            //获取access后，获取用户信息
            self.getUserInfo(Access: userAccess, callBack: callBack)
            
            
        })
        
    }
    
    private func getUserInfo(Access: LCOAuthModel,callBack:@escaping (Bool) ->()){
        let token = Access.access_token
        let uid = Access.uid
        LCNetMansagerTools.sharedTools.requestUserInfo(access_token: token!,uid:uid, callBack: {(reponeds, error) -> () in
            if error != nil{
                callBack(false)
                return
            }
            
            //1
            let dic: [String:Any] = reponeds as! [String:Any]
            //2
            let name = dic["name"]
            let icon = dic["avatar_large"]
            //3
            Access.name = name as! String?
            Access.avatar_large = icon as! String?
            
            //登录成功后需要归档
            Access.saveUserAccount()
            
            //到这里才是获取用户信息、登录成功
            callBack(true)
            
        })
        
    }

    

}
